package com.jichangxiu.server.platform.service;

import com.jichangxiu.common.entity.bo.PageData;
import com.jichangxiu.framework.mybatis.BaseService;
import com.jichangxiu.server.platform.entity.dto.PlatformConfigQueryDto;
import com.jichangxiu.server.platform.entity.po.PlatformConfig;
import com.jichangxiu.server.platform.entity.vo.PlatformConfigAddVo;
import com.jichangxiu.server.platform.entity.vo.PlatformConfigEditVo;
import com.jichangxiu.server.platform.entity.vo.PlatformConfigQueryVo;

import javax.validation.constraints.NotBlank;
import java.util.List;

/**
 * PlatformConfigService:
 *
 * @author Jcx
 * @create 2023-03-08 21:17
 */
public interface PlatformConfigService extends BaseService<PlatformConfig> {

    /**
     * 新增配置
     *
     * @param platformConfigAddVo 配置视图对象
     * @return 是否成功
     */
    public Boolean add(PlatformConfigAddVo platformConfigAddVo);

    /**
     * 多选级联删除配置
     *
     * @param configIdList 配置ID列表
     * @return 是否成功
     */
    public Boolean del(List<String> configIdList);

    /**
     * 修改配置信息
     *
     * @param platformConfigEditVo 配置视图对象
     * @return 是否成功
     */
    public Boolean edit(PlatformConfigEditVo platformConfigEditVo);

    /**
     * 根据ID获取配置详情
     *
     * @param configId 配置ID
     * @return 配置详情
     */
    public PlatformConfigQueryDto info(@NotBlank(message = "配置ID不能为空") String configId);

    /**
     * 分页查询配置列表
     *
     * @param platformConfigQueryVo 配置视图对象
     * @return 分页配置列表
     */
    public PageData<PlatformConfigQueryDto> pageList(PlatformConfigQueryVo platformConfigQueryVo);

    /**
     * 获取平台初始化配置
     *
     * @return 配置列表
     */
    public List<PlatformConfigQueryDto> getInitPlatformConfig();

    /**
     * 获取系统初始化配置
     *
     * @return 配置列表
     */
    public List<PlatformConfigQueryDto> getInitSystemConfig();

    /**
     * 跨平台获取平台配置参数值
     *
     * @param configCode 配置标识
     * @param configKey  配置键名
     * @return 配置键值
     */
    public String getPlatformConfigValue(String configCode, String configKey);

    /**
     * 跨平台获取平台配置参数值
     *
     * @param configCode   配置标识
     * @param configKey    配置键名
     * @param defaultValue 默认值
     * @return 配置键值
     */
    public String getPlatformConfigValue(String configCode, String configKey, String defaultValue);

    /**
     * 获取指定租户的配置
     *
     * @param tenantId   租户ID
     * @param configCode 配置标识
     * @param configKey  配置键名
     * @return 配置键值
     */
    public String getConfigValue(String tenantId, String configCode, String configKey);

    /**
     * 获取指定租户的配置
     *
     * @param tenantId     租户ID
     * @param configCode   配置标识
     * @param configKey    配置键名
     * @param defaultValue 默认值
     * @return 配置键值
     */
    public String getConfigValue(String tenantId, String configCode, String configKey, String defaultValue);

}
